//Propósito del test: 	-invocar metodos dinamicos

class A 
{
	varinst String String_a;
	varinst int int_a;
	varinst char char_a;
	varinst boolean bool_a;
	A(String s, char c, int i, boolean b)
	{
		String_a = s;
		int_a = i;
		char_a = c;
		bool_a = b;	
	}
	
	
	static void main()
	{
		varlocal String s;
		varlocal int i;
		varlocal char c;
		varlocal boolean b;
		
		varlocal A a_aux;
		varlocal B b_aux;
		
		s = "hola";
		i = 14;
		c = 'c';
		b = true;
		
		b_aux = new B(a_aux);
		
		(System.printSln("Las variables locales:"));
		(System.printIln(i));
		(System.printCln(c));
		(System.printBln(b));
		(System.printSln(s));
		
		a_aux = new A(s,c,i,b);
		b_aux = new B(a_aux);
		(System.println());
		(System.printSln("Llamo a metb de la variable de a_aux:"));
		i = (a_aux.metb(c));
		(System.println());
		(System.printSln("Llamo a metc de la variable de instancia a_B de B :"));
		(b_aux.a_B.metc());
		(System.println());
		(System.printSln("Llamo a meta de la variable de instancia a_B de B :"));
		(b_aux.a_B.meta());
		(System.println());
		(System.printSln("Llamo a metd de la variable de a_aux:"));
		(a_aux.metd());
		(System.println());
		(System.printSln("main: cierro"));
	}
	
	dynamic void meta()
	{
		(System.printSln("entre a meta "));
	}
	
	dynamic int metb(char c)
	{
		(System.printSln("entre a metb "));
		return 22;
	}
	
	dynamic void metc()
	{
		(System.printSln("entre a metc "));
	}
	
	dynamic void metd()
	{
		(System.printSln("entre a metd "));
	}

	
}

class B
{
	varinst A a_B;
	B(A parametro)
	{
		a_B = parametro;
	}
}